export default class extends Laya.Script {

    //挂在UI界面上的UI控制脚本

    //设置自身为Sprit精灵类型，方便获取Script的各种属性
    owner=this.owner as Laya.Sprite;
    //一个新的文本，装游戏分数文本，方便获取属性
    txt_score = new Laya.Text;
    //一个新的文本，装排行榜文本，方便获取属性
    txt_Rank = new Laya.Text;
    //一个新的文本，装开始游戏文本，方便获取属性
    txt_Start = new Laya.Text;
    //一个新的精灵，装游戏结束界面，方便获取属性
    GameOverPanle = new Laya.Sprite;
    //一个新的弹出对话框，装排行榜的弹出对话框，方便获取属性
    RankPanle = new Laya.Dialog;
    //设置游戏开始开关
    isStart = false;
    //设置分数
    score = 0;
    constructor() { super(); 
    //在UI脚本中直接拉入txt_score，直接获取分数显示文本
    /** @prop {name:txt_score, tips:"游戏界面分数", type:Node, default:null}*/
    this.txt_score=null; 
    //在UI脚本中直接拉入GameOverPanle，直接获取游戏结束界面
    /** @prop {name:GameOverPanle, tips:"游戏界结束面", type:Node, default:null}*/
    this.GameOverPanle=null; 
    //在UI脚本中直接拉入RankPanle，直接获取排行榜界面
    /** @prop {name:RankPanle, tips:"排行榜界面", type:Node, default:null}*/
    this.RankPanle=null; 
    //在UI脚本中直接拉入txt_Start，直接获取游戏开始文本
    /** @prop {name:txt_Start, tips:"开始游戏文本", type:Node, default:null}*/
    this.txt_Start=null; 
    }
    onAwake(){
        //设置排行榜见面不可见
        this.RankPanle.visible = false;
        //监听AddScore事件，调用addScore方法，就是加分方法
        Laya.stage.on("AddScore",this,this.addScore);
        //监听Over事件，调用Over方法，就是游戏结束方法
        Laya.stage.on("Over",this,this.Over);
        //调用初始化方法
        this.init();
        //清除本地存储信息，可以吧排行榜重置。
        //Laya.LocalStorage.clear();
    }
    //初始化方法
    init(){
        //通过名字获取游戏结束界面下的btn_Again按钮，并设置监听鼠标点击事件，点击后调用btnAgainClick方法
        this.GameOverPanle.getChildByName("btn_Again").on(Laya.Event.CLICK,this,this.btnAgainClick);
        //通过名字获取游戏结束界面下的btn_Rank按钮，并设置监听鼠标点击事件，点击后调用btnRankClick方法
        this.GameOverPanle.getChildByName("btn_Rank").on(Laya.Event.CLICK,this,this.btnRankClick);
        //设置分数文本显示"分数:0"
        this.txt_score.text = "分数:0";
        //设置分数显示界面不可见
        this,this.txt_score.visible = false;
        //通过名字获取排行榜界面下的排行榜文本
        this.txt_Rank = this.RankPanle.getChildByName("txt_Rank") as Laya.Text;
        //监听鼠标点击事件，点击调用GameStart方法
        Laya.stage.on(Laya.Event.CLICK,this,this.GameStart);
    }
    //加分方法
    addScore(){
        //当前脚本设置的score变量分数+1
        this.score++;
        //分数文本显示更新
        this.txt_score.text = "分数:" + this.score; 
    }
    //再来一次按钮点击方法
    btnAgainClick(){
        //当前脚本设置的score变量分数重置
        this.score = 0;
        //分数文本显示更新
        this.txt_score.text = "分数:0";
        //游戏结束界面不可见
        this.GameOverPanle.visible = false;
        //游戏分数显示可见
        this.txt_score.visible = true;
        //广播再来一次事件
        Laya.stage.event("Again");
    }
    //排行榜按钮点击方法
    btnRankClick(){
        //排行榜假面显示可见
        this.RankPanle.visible = true;
        //显示对话框，第一个true关闭其它对话框，第二个true是显示弹出效果
        this.RankPanle.show(true,true);

        //通过键名获取指定键名的值,没有就是空
        //获取之前存好的第一名，第二名，第三名的分数，没有就为空
        var one = Number(Laya.LocalStorage.getItem("One"));
        var two = Number(Laya.LocalStorage.getItem("Two"));
        var three = Number(Laya.LocalStorage.getItem("Three"));

        //设置分数数组
        var scoreArr = [];
        //存入获取的第一名，第二名，第三名，和当前的分数
        scoreArr.push(one,two,three,this.score);
        //用bubbleSort方法排序，方法在下面
        scoreArr=this.bubbleSort(scoreArr);

        //通过键名存入指定键名的值，依次通过数组索引值将分数保存
        Laya.LocalStorage.setItem("One",scoreArr[0])
        Laya.LocalStorage.setItem("Two",scoreArr[1])
        Laya.LocalStorage.setItem("Three",scoreArr[2])
        //排行榜分数排名显示，\n是回车
        this.txt_Rank.text="1 - "+scoreArr[0]+"\n2 - "+scoreArr[1]+"\n3 - "+scoreArr[2]

    }
    //游戏开始方法
    GameStart(){
        //如果游戏已经开始，则返回
        if(this.isStart) return;
        //游戏开始文本不可见
        this.txt_Start.visible = false;
        //游戏分数显示可见
        this.txt_score.visible = true;
        //广播游戏开始Start事件
        Laya.stage.event("Start");
        //设置游戏开始开关
        this.isStart = true;
    }
    //游戏结束方法
    Over(){
        //游戏分数显示不可见
        this.txt_score.visible = false;
        //游戏结束界面可见
        this.GameOverPanle.visible = true;
        //缓动方法，游戏结束见面透明度0.5秒从0缓动到1，定义无加速持续运动。
        Laya.Tween.from(this.GameOverPanle,{alpha:0},500,Laya.Ease.linearIn);
    }
    //冒泡排序，不知道该解释，比如从大到小排序，就是拿数组第一个值和后面的每个都比一次大小，
    //后面的值比第一大，就把大的值和第一个对换，这样，比完一轮，最大的值就在第一位了
    //然后开始第二数值和后面的比大小，反复
    //具体问百度
    bubbleSort(arr){
        var len=arr.length;
        for(var i=0;i<len;i++){
            for(var j=0;j<len-i-1;j++){
                if(arr[j]<arr[j+1]){
                    var temp=arr[j+1];
                    arr[j+1]=arr[j];
                    arr[j]=temp;
                }
            }
        }
        return arr;
    }
    }